Skip to content

Experimental implementation of unstable MSC4388 for Sign in with QR#19127

Merged
hughns merged 15 commits intodevelopfrom
hughns/msc4108-2025
Feb 25, 2026
Merged

Experimental implementation of unstable MSC4388 for Sign in with QR#19127
hughns merged 15 commits intodevelopfrom
hughns/msc4108-2025

Conversation

@hughns
Copy link
Member

@hughns hughns commented Nov 3, 2025

For #19446

This is an implementation of the "insecure rendezvous session" part of MSC4388. This is then used by the 2025 version of MSC4108 which provides a Sign in with QR functionality to allow an existing Matrix client to help authenticate a new Matrix client.

It provides some new Client-Server API endpoints for creating (POST), updating (PUT), fetching (GET) and ending (DELETE) "rendezvous sessions" which are described in depth in the MSCs.

The feature is configured using:

experimental_features:
  msc4388_mode: <mode>

Where mode is one of:

  • off (default): feature is disabled
  • authenticated: enabled and requires an authenticated user to create a rendezvous
  • public: enabled and no authentication is required

The is some more context on these modes in the POST /rendezvous section of the MSC.

n.b. The implementation is independent of the existing experimental MSC4108 support in Synapse which is for the 2024 version.

The experimental feature tracking issue is #19433

Pull Request Checklist

  • Pull request is based on the develop branch
  • Pull request includes a changelog file. The entry should:
    • Be a short description of your change which makes sense to users. "Fixed a bug that prevented receiving messages from other servers." instead of "Moved X method from EventStore to EventWorkerStore.".
    • Use markdown where necessary, mostly for code blocks.
    • End with either a period (.) or an exclamation mark (!).
    • Start with a capital letter.
    • Feel free to credit yourself, by adding a sentence "Contributed by @github_username." or "Contributed by [Your Name]." to the end of the entry.
  • Code style is correct (run the linters)

This is an implementation of the rendezvous transport session part of MSC4388. This is part of the 2025 version of MSC4108

The implementation is independent of the existing experimental MSC4108 support in Synapse which is for the 2024 version of MSC4108.
@hughns hughns force-pushed the hughns/msc4108-2025 branch from 7a06a34 to a1305e2 Compare January 21, 2026 17:12
@hughns hughns changed the title Proof of MSC implementation of MSC4108 version 2025 Implementation of unstable MSC4388 Jan 23, 2026
@hughns hughns requested review from reivilibre and sandhose February 4, 2026 11:23
@hughns hughns marked this pull request as ready for review February 4, 2026 13:06
@hughns hughns requested a review from a team as a code owner February 4, 2026 13:06
@hughns hughns changed the title Implementation of unstable MSC4388 Experimental implementation of unstable MSC4388 Feb 4, 2026
@hughns hughns changed the title Experimental implementation of unstable MSC4388 Experimental implementation of unstable MSC4388 for Sign in with QR Feb 4, 2026
Copy link
Contributor

@reivilibre reivilibre left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

some initial thoughts, seems more or less on track.

@hughns hughns force-pushed the hughns/msc4108-2025 branch from 5e98d02 to a66af7b Compare February 11, 2026 10:41
Copy link
Contributor

@reivilibre reivilibre left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As far as I can see this is now correct and sane

@hughns hughns enabled auto-merge (squash) February 25, 2026 16:47
@hughns hughns merged commit f78d011 into develop Feb 25, 2026
79 of 81 checks passed
@hughns hughns deleted the hughns/msc4108-2025 branch February 25, 2026 17:41
alexlebens pushed a commit to alexlebens/infrastructure that referenced this pull request Mar 10, 2026
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [element-hq/synapse](https://github.com/element-hq/synapse) | minor | `v1.148.0` → `v1.149.0` |

---

### Release Notes

<details>
<summary>element-hq/synapse (element-hq/synapse)</summary>

### [`v1.149.0`](https://github.com/element-hq/synapse/releases/tag/v1.149.0)

[Compare Source](element-hq/synapse@v1.148.0...v1.149.0)

### Synapse 1.149.0 (2026-03-10)

No significant changes since 1.149.0rc1.

### Synapse 1.149.0rc1 (2026-03-03)

#### Features

- Add experimental support for [MSC4388: Secure out-of-band channel for sign in with QR](matrix-org/matrix-spec-proposals#4388). ([#&#8203;19127](element-hq/synapse#19127))
- Add stable support for [MSC4380](matrix-org/matrix-spec-proposals#4380) invite blocking. ([#&#8203;19431](element-hq/synapse#19431))

#### Bugfixes

- Fix the 'Login as a user' Admin API not checking if the user exists before issuing an access token. ([#&#8203;18518](element-hq/synapse#18518))
- Fix `/sync` missing membership event in `state_after` (experimental [MSC4222](matrix-org/matrix-spec-proposals#4222) implementation) in some scenarios. ([#&#8203;19460](element-hq/synapse#19460))

#### Internal Changes

- Add log to explain when and why we freeze objects in the garbage collector. ([#&#8203;19440](element-hq/synapse#19440))
- Better instrument `JoinRoomAliasServlet` with tracing. ([#&#8203;19461](element-hq/synapse#19461))
- Fix Complement CI not running against the code from our PRs. ([#&#8203;19475](element-hq/synapse#19475))
- Log `docker system info` in CI so we have a plain record of how GitHub runners evolve over time. ([#&#8203;19480](element-hq/synapse#19480))
- Rename the `test_disconnect` test helper so that pytest doesn't see it as a test. ([#&#8203;19486](element-hq/synapse#19486))
- Add a log line when we delete devices. Contributed by [@&#8203;bradtgmurray](https://github.com/bradtgmurray) @&#8203; Beeper. ([#&#8203;19496](element-hq/synapse#19496))
- Pre-allocate the buffer based on the expected `Content-Length` with the Rust HTTP client. ([#&#8203;19498](element-hq/synapse#19498))
- Cancel long-running sync requests if the client has gone away. ([#&#8203;19499](element-hq/synapse#19499))
- Try and reduce reactor tick times when under heavy load. ([#&#8203;19507](element-hq/synapse#19507))
- Simplify Rust HTTP client response streaming and limiting. ([#&#8203;19510](element-hq/synapse#19510))
- Replace deprecated collection import locations with current locations. ([#&#8203;19515](element-hq/synapse#19515))
- Bump most locked Python dependencies to their latest versions. ([#&#8203;19519](element-hq/synapse#19519))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41OS4yIiwidXBkYXRlZEluVmVyIjoiNDMuNTkuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW1hZ2UiXX0=-->

Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/4580
Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net>
Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net>
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Mar 12, 2026
Tested on NetBSD 10 amd64 in a mostly 2025Q2 environment.

# Synapse 1.149.1 (2026-03-11)

# Synapse 1.149.0 (2026-03-10)

## Features

- Add experimental support for [MSC4388: Secure out-of-band channel for sign in with QR](matrix-org/matrix-spec-proposals#4388). ([\#19127](element-hq/synapse#19127))
- Add stable support for [MSC4380](matrix-org/matrix-spec-proposals#4380) invite blocking. ([\#19431](element-hq/synapse#19431))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants